﻿using System;
using System.Collections;
using System.Collections.Generic;

namespace YooAsset
{
    internal class DependAssetBundles
    {
        /// <summary>
        /// 依赖的资源包加载器列表
        /// </summary>
        internal readonly List<BundleLoaderBase> DependList;


        public DependAssetBundles(List<BundleLoaderBase> dpendList)
        {
            DependList = dpendList;
        }

        /// <summary>
        /// 是否已经完成（无论成功或失败）
        /// </summary>
        public bool IsDone()
        {
            foreach (var loader in DependList)
            {
                if (loader.IsDone() == false)
                    return false;
            }
            return true;
        }

        /// <summary>
        /// 依赖资源包是否全部加载成功
        /// </summary>
        public bool IsSucceed()
        {
            foreach (var loader in DependList)
            {
                if (loader.Status != BundleLoaderBase.EStatus.Succeed)
                {
                    return false;
                }
            }
            return true;
        }

        /// <summary>
        /// 获取某个加载失败的资源包错误信息
        /// </summary>
        public string GetLastError()
        {
            foreach (var loader in DependList)
            {
                if (loader.Status != BundleLoaderBase.EStatus.Succeed)
                {
                    return loader.LastError;
                }
            }
            return string.Empty;
        }

        /// <summary>
        /// 主线程等待异步操作完毕
        /// </summary>
        public void WaitForAsyncComplete()
        {
            foreach (var loader in DependList)
            {
                if (loader.IsDone() == false)
                    loader.WaitForAsyncComplete();
            }
        }

        /// <summary>
        /// 增加引用计数
        /// </summary>
        public void Reference()
        {
            foreach (var loader in DependList)
            {
                loader.Reference();
            }
        }

        /// <summary>
        /// 减少引用计数
        /// </summary>
        public void Release()
        {
            foreach (var loader in DependList)
            {
                loader.Release();
            }
        }

        /// <summary>
        /// 获取资源包的调试信息列表
        /// </summary>
        internal void GetBundleDebugInfos(List<DebugBundleInfo> output)
        {
            foreach (var loader in DependList)
            {
                var bundleInfo = new DebugBundleInfo();
                bundleInfo.BundleName = loader.MainBundleInfo.Bundle.BundleName;
                bundleInfo.RefCount = loader.RefCount;
                bundleInfo.Status = loader.Status.ToString();
                output.Add(bundleInfo);
            }
        }
    }
}